#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>


//int main()
//{
//  int g_val = 100;
//  int cnt = 5;
//  int ret = fork();
//  while(cnt)
//  {
//    if(ret > 0)
//    {
//      printf("parent[%d]: %d: %p\n",getpid(), g_val, &g_val);
//    }
//    if(ret == 0)
//    {
//      if(cnt == 3)
//      {
//        g_val = 200;
//      }
//      printf("child[%d]: %d: %p\n",getpid(), g_val, &g_val);
//    }
//    cnt--;
//    sleep(1);
//  }
//  return 0;
//}

int g_unval;
int g_val = 100;
int main()
{
  const char* s = "sherry";
  printf("code addr:%p\n", main);
  printf("string rdonly addr:%p\n", s);
  printf("int addr:%p\n", &g_val);
  printf("unint adde:%p\n", &g_unval);

  char* heap = (char*)malloc(10);
  printf("heap addr:%p\n", heap);
  printf("stack addr:%p\n", &s);
  
  int a = 1;
  int b = 1;
  int c = 1;
  printf("stack addr:%p\n", &a);
  printf("stack addr:%p\n", &b);
  printf("stack addr:%p\n", &c);

}


//int main()
//{
//  printf("%s\n",getenv("PATH"));
//  printf("%s\n",getenv("HOME"));
//  printf("%s\n",getenv("SHELL"));
//}


//int main()
//{
//  extern char** environ;
//  for(int i = 0; environ[i]; ++i)
//  {
//    printf("%d -> %s\n", i, environ[i]);
//  }
//  return 0;
//}



//int main(int argc, char* argv[], char* env[])
//{
//  for(int i = 0; env[i]; ++i)
//  {
//    printf("%d -> %s\n", i, env[i]);
//  } 
// if(argc <= 1)
// {
//   printf("Usage: ./maproc -[a|h]\n");
//   return 1;
// }
// else if(strcmp(argv[1], "-a") == 0)
// {
//   printf("printf -all\n");
// }
// else if(strcmp(argv[1], "-h") == 0)
// {
//   printf("printf -h\n");
// }
// else 
// {
//   printf("./myproc -else\n");
// }


// for(int i =0; i < argc; ++i)
// {
//   printf("argv[%d] -> %s\n", i, argv[i]);
// }


// int cnt = 5;
// while(cnt--)
// {
//   printf("I am a cmd -> process\n");
//   sleep(1);
// }


// while(1)
// {
//   printf("I am a process. pid = %d, ppid = %d\n", getpid(), getppid());
// }
//  return 0;
//}
